package com.open.capacity.user.dao;

import com.open.capacity.common.model.Group;
import com.open.capacity.common.model.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
@Mapper
public interface GroupDao {
    /**
     * 添加小组
     * @param group 小组实体
     * @return
     */
    int addGroup(Group group);

    /**
     * 查看教师创建的小组
     * @param params 条件集合
     * @return
     */
    List<Group> selectGroupByTeacher(Map<String,Object> params);

    /**
     * 查看教师创建的小组的数量
     * @param params 条件集合
     * @return
     */
    int selectGroupCountByTeacher(Map<String,Object> params);

    /**
     * 学员查看自己所在小组信息
     * @param userid 学员id
     * @return
     */
    Group selectGroupByMember(Long userid);

    /**
     * 逻辑删除小组
     * @param id  小组id
     * @return
     */
    int deleteGroupById(int id);

    /**
     * 修改小组状态
     * @return
     */
    int updateGroupType(Map<String, Object> params);

    /**
     * 查询没有分配小组的学员
     * @return
     */
    List<SysUser> getNoGroupUser();

    /**
     * 查询小组成员（为分页）
     * @param id    小组id
     * @return
     */
    List<SysUser> getGroupUser(int id);

    /**
     * 添加小组成员
     * @param param
     * @return
     */
    int addGroupMember(Map param);

    /**
     *移除小组成员
     * @param param
     * @return
     */
    int removeGroupMember(Map param);

    /**
     * 查询小组学员
     * @param id    小组id
     * @return
     */
    List<SysUser> selectUserByGroup(int id);

    /**
     * 修改小组人数
     * @param id    小组id
     * @param number小组人数
     * @return
     */
    int updateGroupNumber(@Param("id") int id, @Param("number") int number);

    /**
     * 修改小组信息
     * @param group 小组实体类
     * @return
     */
    int updateGroup(Group group);

    /**
     * 根据小组名称查询小组
     * @param name  小组名称
     * @return
     */
    List<Group> selectGroupByName(String name);

    /**
     * 查询小组学员信息
     * @param params
     * @return
     */
    List<SysUser> selectUserByGroupId(Map<String,Object> params);

    /**
     * 查询小组学员数量
     * @param params
     * @return
     */
    int selectUserCountByGroup(Map<String,Object> params);

    List<Group> getGroup(Map<String, Object> params);

    /**
     * 通过班主任查询成员
     * @param teachid
     * @return
     */
    List<SysUser> getGroupUserByTeacher(Long teachid);
}
